package org.infodavid.common.model;

import java.util.List;

import org.infodavid.common.persistence.IBasicDataObject;

/**
 * The Interface IGenericPropertiesMap.
 */
public interface IGenericPropertiesMap extends IBasicDataObject {
  /** The data. */
  String DATA = "data";

  /**
   * Clear.
   */
  void clear();

  /**
   * Size.
   * @return the int
   */
  int size();

  /**
   * Adds the property.
   * @param value the data to add
   * @return the replaced simple data or null
   */
  IGenericProperty addData(IGenericProperty value);

  /**
   * Adds the property.
   * @param name the name
   * @param value the value
   * @return the simple data
   */
  IGenericProperty addData(String name, String value);

  /**
   * Adds the property.
   * @param name the name
   * @param type the type
   * @param value the value
   * @return the simple data
   */
  IGenericProperty addData(String name, String type, String value);

  /**
   * Gets the property.
   * @param name the name
   * @return the property
   */
  IGenericProperty getData(String name);

  /**
   * Gets the property value.
   * @param name the name
   * @return the property value
   */
  String getValue(String name);

  /**
   * Removes the property.
   * @param name the name
   * @return the i generic property
   */
  IGenericProperty removeData(String name);

  /**
   * Gets the properties.
   * @return the properties
   */
  List<IGenericProperty> getData();

  /**
   * Sets the data.
   * @param values the values
   */
  void setData(List<IGenericProperty> values);
}
